Nun, die externe Fragmentierung ist ein Problem, die ist auflösbar, diese Fragmentierung durch
Betriebssystemmaßnahmen. Eine Maßnahme ist einfach bei der Erzeugung eines neuen Lochs
eben zuzusehen, ob dieses Loch irgendwie an bereits bestehende Löcher angrenzt und dadurch
praktisch ein größeres Loch zu schaffen. Damit im Wesentlichen eben auch die Lochliste
zu verkürzen, weil man anstatt zwei oder drei Löcher vielleicht nur noch ein Loch
praktisch in der Liste verwalten muss. Diese Maßnahme, die kann man immer dann machen und
man wird sie auch dann genau dann tun, wenn man einen praktischen Gebrauchsstück freigibt.
Man nimmt das also zurück mit der Free-Operation oder mit irgendwelchen anderen Maßnahmen,
einfach die Zerstörung eines gesamten Prozessexemplars. Dann würden ja alle Gebrauchsstücke, die zu
diesem Prozessexemplar dann letztendlich gehören, wieder freigegeben werden. Die kommen alle
in die Lochliste rein und dann kann man prüfen, ob da irgendwie größere Löcher praktisch
durch Verschmelz und durch Vereinigung entstehen können. Damit kriegen wir größere Hohlräume
und das hat dann durchaus sehr positive andere Eigenschaften. Wir haben weniger Löcher,
dadurch haben wir natürlich geringere externe Fragmentierung, aber wir haben dadurch auch
weniger Lochdeskriptoren. Damit haben wir kürzere Lochlisten und wir haben damit kürzere
Suchzeiten. Das beschleunigt also insgesamt die Speicherzuteilung und gibt uns eine kürzere
Antwortzeit bei einer Speicheranfrage. So, die Löchervereinigung, die kann in unterschiedlicher
Art und Weise geschehen. Letztendlich haben wir hier vier verschiedene Möglichkeiten,
die wir auseinanderhalten müssen, je nachdem wie praktisch das Gebrauchsstück, was freizugeben
ist, woraus ein Loch entstehen soll, wie das praktisch in diesem Adressraum des betreffenden
Prozesses angeordnet ist oder letztendlich auch im Hauptspeicher platziert ist. Wenn wir
eine Situation haben, wo so ein Loch, das entstehen soll, zwischen zwei Gebrauchsstücken,
den letztendlich liegt, dann ist keine Vereinigung möglich, aber in den anderen drei Varianten
sehr wohl. Wenn wir eine Situation haben, wo dieses neue Loch direkt nach einem Loch
entstehen würde, dann vereinigt man diese beiden Löcher und hat ein entsprechendes großes
Loch. Ich glaube, dass gleiche macht man, wenn dieses neue entstehende Loch direkt vor einem
Loch ist, dann wird es mit seinem Nachfolger, was bereits als Loch denn existiert, vereinigt.
Ja, oder es liegt, das ist der beste Fall, genau zwischen zwei Löchern, dann kombiniert
man letztendlich diese Schritte zwei und drei und generiert, anstatt drei Löcher in der
Liste zu haben, einfach ein Loch und hat dann nur noch einen Loch des Crypto in der Liste.
Da gibt es jetzt natürlich auch eine gewisse Abhängigkeit zum Zuteilungsverfahren, wo man
denn sehen muss, dass diese Verschmelzungsaufwände durchaus beträchtlich sein können. Da sieht
man dann auch, welche Vorteile gewisse Zuteilungsverfahren haben, wenn man eben Verschmelzung noch mit
berücksichtigen soll. Beim Buddy ist es einfach so, da muss man das passende Buddy-Stück
letztendlich halt finden. Also wenn man jetzt ein Objekt freigibt und weiß, zu welchem Buddy
das gehört von der Größe, dann muss man genau das gleiche Angrenzende, der Kumpel sozusagen,
im Hauptspeicher da zu finden. Dann muss man überprüfen, ob denn das Loch, was man im Hauptspeicher
halt hat, ob das eben als Buddy gilt. Und das ist mal hier so ein bisschen skizziert,
wie man sich so einen Check denn entsprechend vorstellen kann, wo man die Zweierpotenzgröße
natürlich dann halt überprüft und dann letztendlich mit dem zweiten Check nachprüfen muss,
ob die wirklich aneinander grenzen und ob dadurch dann entsprechend die Größeninformationen
wirklich gewertet ist. Das ist schon ein bisschen problematisch. Wir haben ja auch gesehen,
dass dieses Buddy-Verfahren auch hinsichtlich der Fragmentierungsfrage nicht unbedingt sehr
positiv zu sehen ist. Bei dem First und Next Fit haben wir folgende Situationen. Hier wissen wir
nochmal, die Lochliste ist nach der Größe der Adressen der jeweiligen Löcher, den halt nach
hinten hinauf steigend sortiert. Also die Adresse ist das Sortierkriterium. Wenn wir jetzt auch so ein
Loch schaffen wollen, wir haben ein Gebrausstück, dann kennen wir ja auch die Adresse dieses
Gebrausstücks, denn genau den Speicher an dieser Adresse wollen wir freigeben und dann suchen wir
in der Liste, ob denn dieses Loch praktisch ein Nachbar ist. Und ein Nachbar wäre es genau dann,
wenn wir jetzt mal so ein Listenelement haben, wenn wir auf diese Anfangsadresse dieses
Presenters
Zugänglich über
Offener Zugang
Dauer
00:15:44 Min
Aufnahmedatum
2021-01-12
Hochgeladen am
2021-01-12 13:19:50
Sprache
de-DE